home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Taifun / Taifun 054 (1988-05-15)(Ossowski, Stefan)(DE)(PD).zip / Taifun 054 (1988-05-15)(Ossowski, Stefan)(DE)(PD).adf / MRBackup / MRBackup2.0 / List.c < prev    next >
C/C++ Source or Header  |  1988-04-09  |  3KB  |  148 lines

  1. /* MRBackup:    Listing support routines
  2.  * Filename:    List.c
  3.  * Author:        Mark R. Rinfret
  4.  * Date:        11/27/87
  5.  *
  6.  * History:        (most recent changes first)
  7.  *
  8.  * 11/27/87 -MRR- This module was created for version 2.0.
  9.  *
  10.  */
  11.  
  12. #define MAIN
  13.  
  14. #include "MRBackup.h"
  15.  
  16. static char listDate[20] = "??/??/?? ??:??:??";
  17.  
  18. ^L
  19. /* Output a new header to the listing file. */
  20.  
  21. Header()
  22. {
  23.     if (doListing) {
  24.         if (doFormat) {                /* A new disk? */
  25.             fprintf(listing,
  26.                 "\f    MRBackup Listing of Volume %s created on %s\n\n", 
  27.                 destVol, listDate);
  28.         }
  29.         else {
  30.             fprintf(listing,
  31.             "\f    MRBackup Partial Listing of Volume %s updated on %s\n\n",
  32.                 destVol, listDate);
  33.         }
  34.         lineCount = 2;
  35.     }
  36. }
  37. ^L
  38. /* List information about the file or directory we just created.
  39.  * Called with:
  40.  *        name:        destination filename string
  41.  */
  42.  
  43. void
  44. ListFileInfo(name)
  45.     char *name;
  46. {
  47.     struct Lock *lock;
  48.     char dateStr[20], infoLine[255];
  49.  
  50.     if (!doListing) return;
  51.  
  52.     if (! (lock = (struct Lock *) Lock(name, SHARED_LOCK))) {
  53.         sprintf(infoLine, "ListFileInfo: could not lock %s", name);
  54.         ListLine(infoLine);
  55.         return;
  56.     }
  57.  
  58.     if (Examine(lock, fibWork)) {
  59.         if (fibWork->fib_DirEntryType >=0) {
  60.             NewLine(2);
  61.             sprintf(infoLine,"Directory:  %s", name);
  62.             NewLine(1);
  63.         }
  64.         else {
  65.             DS2Str(dateStr, "%02m/%02d/%02y %02h:%02n:%02s", 
  66.                     &fibWork->fib_Date);
  67.             /* It is my understanding that the maximum filename length for
  68.              * a particular node is 30 characters.  The following code will
  69.              * probably never execute but it makes me feel warm and safe.
  70.              */
  71.  
  72.             if (strlen(fibWork->fib_FileName) > 40) {
  73.                 fibWork->fib_FileName[40] = '*';
  74.                 fibWork->fib_FileName[41] = '\0';
  75.             }
  76.             sprintf(infoLine,"  %s %8ld %5ld %s",
  77.                     dateStr, fibWork->fib_Size, fibWork->fib_NumBlocks,
  78.                     fibWork->fib_FileName);
  79.         }
  80.     }
  81.     else {
  82.         sprintf(infoLine,"ListFileInfo: can't examine %s", name);
  83.     }
  84.     UnLock(lock);
  85.     ListLine(infoLine);
  86. }
  87. ^L
  88. /* Output a line to the listing file.  Start a new line if necessary.
  89.  * The output string is assumed to have no form control characters.
  90.  * Called with:
  91.  *        str:        string to be output
  92.  */
  93. ListLine(str)
  94.     char *str;
  95. {    
  96.     if (doListing) {
  97.         if (lineCount >= LINES_PER_PAGE) Header();
  98.         fprintf(listing,"  %s\n",str);
  99.         fflush(listing);
  100.         ++lineCount;
  101.     }
  102. }
  103. ^L
  104. /* Skip 'n' lines in the listing file.
  105.  * Called with:
  106.  *        n:        number of lines to skip
  107.  */
  108.  
  109. NewLine(n)
  110.     int n;
  111. {
  112.     if (doListing) {
  113.         if (n + lineCount >= LINES_PER_PAGE)
  114.             Header();
  115.         else while (n--) {
  116.             fputc('\n', listing);
  117.             ++lineCount;
  118.         }
  119.     }
  120. }
  121. ^L
  122. /* Open the listing file.
  123.  * Called with:
  124.  *        name:        file or device pathname
  125.  * Returns:
  126.  *        status (0 => success)
  127.  */
  128. int
  129. OpenList(name)
  130.     char *name;
  131. {
  132.     int status = 0;
  133.  
  134.     if (listing) fclose(listing);        /* prior listing file open? */
  135.     if (!(listing = fopen(name, "w"))) {
  136.         status = errno;
  137.         sprintf(conmsg,
  138.                 "I can't open the listing file \"%s\", error %d.\n",
  139.                 name, status);
  140.         TypeAndSpeak(conmsg);
  141.     }
  142.     else {
  143.         DS2Str(listDate, "%02m/%02d/%02y %02h:%02n:%02s",now); 
  144.         lineCount = LINES_PER_PAGE;
  145.     }
  146.     return status;
  147. }
  148.